package org.com.behavioralPattern.chainofResponsibilityPattern;

/**
 * 责任链模式
 *
 * @author Jonny
 * @version 1.0
 * @Description:
 * @date 2021/4/27 11:57
 */

/**
 *
 *  ■ 责任链模式将请求和处理分开，请求者不知道是谁处理的，处理者可以不用知道请求的全貌。
 *  ■ 提高系统的灵活性。
 *
 *  ■ 降低程序的性能，每个请求都是从链头遍历到链尾，当链比较长的时候，性能会大幅下降。
 *  ■ 不易于调试，由于采用了类似递归的方式，调试的时候逻辑比较复杂。注意责任链中的节点数量需要控制，
 *  避免出现超长链的情况，这就需要设置一个最大的节点数量，超过则不允许增加节点，避免无意识地破坏系统性能。
 *
 *  责任链模式是一种常见的模式，Struts2的核心控件FilterDispatcher是一个Servlet过滤器，
 *  该控件就是采用责任链模式，可以对用户请求进行层层过滤处理。责任链模式在实际的项目中使用的比较多，其典型的应用场景如下。
 *  ■ 一个请求需要一系列的处理工作。
 *  ■ 业务流的处理，例如，文件审批。
 *  ■ 对系统进行补充扩展。
 */
public class DrumBeater {
    public static void main(String[] args) {
        Player player=new PlayerA(new PlayerB(new PlayerC(new PlayerD(null))));
        player.handle(3);
    }
}
